/**
*** 表格相关的JS
*** author:xieguojun
***
**/

/**
*** 表格相关的JS
*** author:xieguojun
***
**/

/**
*** 设置表单域为只读
*** fieldId:表单域id
*** flag:默认为true,设置为false时，可以设置表单域为非只读
**/

debug =true;

Ext.namespace('Wssip.form');
 
/**
 * 解析Wonders.util.formLoad的回调函数的action参数
 * @param action
 * @return
 */
Wssip.form.getJsonDataFromAction =function(action){
	
	if(!action &&debug){
		Wonders.Msg.info('后台返回的action数据不正确!','错误');
		return false;
	}
	
	if(!action.response &&debug){
		Wonders.Msg.info('后台返回的action.response数据不正确!','错误');
		return false;
	}
	
	if(!action.response.responseText &&debug){
		Wonders.Msg.info('后台返回的action.response.responseText数据不正确!','错误');
		return false;
	}
	
	return action.response.responseText;
}

/**
 * 获取Action返回的值数组
 * @param action
 * @return
 */
Wssip.form.getFormValues =function(action){
	var jsonData =Wssip.form.getJsonDataFromAction(action);
	var json=Ext.decode(jsonData);
	if(typeof(json) != 'undefined'){
		if(typeof(json.result) != 'undefined'){
			return json.result[0];
		}
	}
}
/**
 *  解析Wonders.util.formLoad的回调函数的action的数据
 *  返回类似于:result:[{},{},{}] 中所有的{},{},{}
 * @param action
 * @return
 */
Wssip.form.getFormAllValues = function(action){
	var jsonData =Wssip.form.getJsonDataFromAction(action);
	var json=Ext.decode(jsonData);
	if(typeof(json) != 'undefined'){
		if(typeof(json.result) != 'undefined'){
			return json.result;
		}
	}
}

/**
*** 解析Wonders.util.formLoad的回调函数的action的数据
*** action:对应回调函数的action参数
*** key：对应property
**/
Wssip.form.getFormValue = function(action,key){
	
	return Wssip.form.getFormValues(action)[key];
	
}

/**
 * 根据urlParams作为条件动态加载combobox,并设置初始值
 * @param comboboxId
 * @param urlParams
 * @param value
 * @return
 */
Wssip.form.loadCombobox =function(comboboxId,urlParams,value){
	
	Wssip.form.changeStoreParams(comboboxId,urlParams,true);
	
	var combobox =Ext.getCmp(comboboxId);
	if(combobox &&value)
		combobox.setValue(value);
	 
}

 
/**
 * 动态调整grid或者combobox的加载参数
 * @param id     grid标签的id或者 combobox标签的id
 * @param params 参数对，json数据，例如：{'aac001':'0000','aab001',' '}
 * @param reload 是否即可重新加载store
 * @return
 */
Wssip.form.changeStoreParams = function(id,params,reload){
	
	var obj =Ext.getCmp(id);
	
	if(typeof(obj) =='undefined'){
		Wonders.Msg.info('错误的id[changeStoreParams]','错误');
		return;
	}
	
	if(typeof(params) =='undefined'){
		Wonders.Msg.info('错误的params[changeStoreParams]','错误');
		return;
	}
	
	var store =obj.store;
	
	params.limit =store.baseParams.limit;
	
	store.baseParams =params;	
	
	if(reload ===true)
		store.load();	
}


/**
 * 设置表单域为不可用(可用)
 * @param id   标签id
 * @param flag 不填或者true：设置为不可用；false：设置为可用
 * @return
 */
Wssip.form.disable = function(id,flag){
	var obj =Ext.getCmp(id);
	
	if(typeof(obj) ==='undefined'){
		Wonders.Msg.info('错误的id[disable]','错误');
		return;
	}
	
	if(flag ===false)
		obj.enable();
	else
		obj.disable();
}	

/**
 * 设置表单域为可用(不可用)
 * @param id   标签id
 * @param flag 不填或者true：设置为可用；false：设置为不可用
 * @return
 */
Wssip.form.enable = function(id,flag){
	var obj =Ext.getCmp(id);
	
	if(typeof(obj) ==='undefined'){
		Wonders.Msg.info('错误的id[enable]','错误');
		return;
	}
	
	if(flag ===false)
		obj.disable();
	else
		obj.enable();
}

/**
 * 设置表单域为只读
 * @param fieldId 表单域id
 * @param flag    不填或者true:设置只读,false：设置非只读
 * @return
 */
Wssip.form.setReadOnly =function(fieldId,flag){
	
	var obj =Ext.getCmp(fieldId);
	
	if(!obj &&debug){
		Wonders.Msg.info(fieldId+'对应的ID为指定!','错误');
		return false;
	}
	
	if(typeof(flag) !='undefined' && flag ==false)
		obj.setReadOnly(false);
	else
		obj.setReadOnly(true);
}
  


/**
 * 获取combobox中的数据集
 * @param comboboxId:combobox id
 * @return
 */
Wssip.form.getRecordsFromCombobox = function(comboboxId){
	
	var obj =Ext.getCmp(comboboxId);
	
	if(typeof(obj) ==='undefined'){
		Wonders.Msg.info('错误的id[getRecordsFromCombobox]','错误');
		return;
	}
	
	var store =obj.store;
	
	return store.getRange();
}

/**
 * 获取records中对应key,value的值
 * @param records
 * @param key
 * @param value
 * @return
 */
Wssip.form.getRecordByKeyValue =function(records,key,value){
	
	if(!Ext.isArray(records)){
		Wonders.Msg.info('错误的records对象[getRecordByKeyValue]','错误');
		return;		
	}
	
	for(var i=0;i<records.length;i=i+1){
		
		var record =records[i];
		
		if(record[key] ==value)
			return record;
	}	
}

/**
 * 设置checkbox为只读
 * @param id   checkbox id
 * @param flag true:只读 false:非只读
 * @return
 */
Wssip.form.setCheckBoxReaOnly =function(id,flag){
	
	var obj =Ext.getCmp(id);
	
	if(flag ===true)
		obj.on('check',function(){return false;});
	else
		obj.un('check');
}

/**
 * 获取combobox的显示文本
 * @param id
 * @return
 */
Wssip.form.getComboText =function(id){
	
	var combo =Ext.getCmp(id);
	return combo.lastSelectionText	
}

/**
 * 动态加载combobox数据
 * @param comboid combobox id
 * @param data    动态数据,数组类型
 * @return 
 */
Wssip.form.loadData2Combo = function(comboid,data){
	var combo =Ext.getCmp(comboid);
	
	combo.store.removeAll(); 
	combo.store.loadData(data);
}

 
var defaultFormExceptionHanlder =function(form,action){
	Wonders.utils.handleError(action.response.responseText,false,false);
	return false;
};

/**
 * 清空combobox或者grid数据
 * @param objid  combobox或者grid id
 * @return
 */
Wssip.form.removeStoreData =function(objid){
	var obj =Ext.getCmp(objid);
	
	if(typeof obj =='undefined'){
		return;
	}
	
	var store =obj.store;
	
	if(typeof store =='undefined'){
		return;
	}
	
	store.removeAll();	
}

/**
 * 进行form重置
 * formid:cw:form的id
 */
Wssip.form.reset=function(formid){
	
	if(typeof formid =='undefined'){
		Wonders.Msg.info('必须指明Yzsb.form.reset重置的form id！','错误');
		return;
	}
	
	var obj =Ext.getCmp(formid).getForm();
	
	if(typeof obj =='undefined'){
		Wonders.Msg.info('指定的formid['+formid+']不存在！','错误');
		return;
	}
	
	obj.reset(); 
}

/**
 * 清空combobox数据
 * @param comboId
 * @return
 */
Wssip.form.cleanComboData =function(comboId){

	var grid =Ext.getCmp(comboId);
	 
	grid.store.removeAll();
	
}

/**
 * 将传入的linkage重置
 * 
 * 入参:linkage的id
 * 实例：resetLinkage('linkage id1','linkage id2','linkage id3',...'linkage idn');
 * @return
 */
Wssip.form.resetLinkage=function(){
	
	var count =arguments.length;
	var objCmp=null;
	for(var i=0;i<count;i=i+1){
		objCmp =Ext.getCmp(arguments[i]);
		
		if(objCmp){
			objCmp.disable();
		}
	}
}

/**
 * 隐藏内容，可以是ext对象或者是div
 * 
 * 调用方式:
 * hide('extid1','extid2','div3','extid3','div2','div1');
 * @return
 */
Wssip.form.hide =function(){
	var count =arguments.length;
	
	var objCmp=null;
	for(var i=0;i<count;i=i+1){
		objCmp =Ext.getCmp(arguments[i]);
		
		if(objCmp){
			objCmp.hide();
		}else{
			objCmp =document.getElementById(arguments[i]);
			objCmp.style.display="none";
		}
	}
}

/**
 * 显示内容，可以是ext对象或者是div
 * 
 * 调用方式:
 * show('extid1','extid2','div3','extid3','div2','div1');
 * @return
 */
Wssip.form.show =function(){
	var count =arguments.length;
	
	var objCmp=null;
	for(var i=0;i<count;i=i+1){
		objCmp =Ext.getCmp(arguments[i]);
		
		if(objCmp){
			objCmp.show();
		}else{
			objCmp =document.getElementById(arguments[i]);
			objCmp.style.display="block";
		}
	}
}

// 表单提交验证
Wssip.form.validateForm = function(formId) {
	var form = Ext.getCmp(formId);
	var errorText = "";
	var firstErrorItem;
	if (form.items) {
		for (var i = 0; i < form.items.length; i++) {
			var item = form.items.get(i);
			// \u5047\u5982\u662f\u5bb9\u5668
			if (item.getXTypes().indexOf("field") > -1 && !item.validate()) {
				if (form.getXType() == 'htmlform'
						&& (form.getErrorStyle() == 'allalert' || form
								.getErrorStyle() == 'print')) {
					errorText += '[' + item.fieldLabel + ']: '
							+ item.invalidText + '<br>';
				    if (firstErrorItem==null){
					    firstErrorItem = item;
					}
				} else {
				    //item.focus();
				    Ext.MessageBox.show({
				    	title:"\u63d0\u793a",
				    	msg:'[' + item.fieldLabel + ']: '+ item.invalidText,
				    	buttons:Ext.MessageBox.OK,
				    	width : 200,
				    	mutiline : true,
				    	icon:Ext.MessageBox.INFO,
				    	fn:function(){
				    		item.focus();
				    	}
				    });
					
					return false;
				}
			}
		}
	}
	if (errorText != '') {
		if (form.getXType() == 'htmlform' && form.getErrorStyle() == 'allalert') {
		    firstErrorItem.focus();
			Wonders.Msg.info(errorText);
		} else if (form.getXType() == 'htmlform'
				&& form.getErrorStyle() == 'print') {
			if (Wonders.utils.error_html != null)
				Wonders.utils.error_html.remove();
			Wonders.utils.error_html = form.body.insertHtml('afterBegin',
					'<font color=red>' + errorText + '</font>', true);
			form.body.insertHtml('afterBegin',
					'<a href="#" id="printMode"><a>', true);
		    document.getElementById('printMode').click();
		}
		return false;
	} else {
		if (form.getXType() == 'htmlform' && form.getErrorStyle() == 'print') {
			if (Wonders.utils.error_html != null)
				Wonders.utils.error_html.remove();
		}
	}
	return true;
};
